package com.dwfyc.managedBean.documento;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.faces.event.ActionEvent;

import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Transactional;

import com.dwfyc.fachada.IGestionDocumento;
import com.dwfyc.fachada.IGestionTipos;
import com.dwfyc.hibernate.Documento;
import com.dwfyc.hibernate.Tipos;
import com.icesoft.faces.component.ext.RowSelectorEvent;


public class ModificarDocBean{
	private String nombre;
	private String descripcion;
	private String caducidad;
	//private String[] tipo = { "tipo1", "tipo2" };
	private List<Documento> listaDocumentos; 
	private boolean verPopup = false;
	private String popupCabecera = "";
	private String popupCuerpo ="";
	
	
	private Logger log = Logger.getLogger(this.getClass());
	private IGestionTipos gt;	
	private IGestionDocumento gd;
	
	
	public void metodoInicial(){
		try{
			listaDocumentos = gd.getAllDocumentosConTipos();			
		}catch (Exception e) {
		
			log.debug(this.getClass() + "Hubo excepcion: "+e.getLocalizedMessage());
		}
	}
	
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getCaducidad() {
		return caducidad;
	}

	public void setCaducidad(String caducidad) {
		this.caducidad = caducidad;
	}

	public IGestionTipos getGt() {
		return gt;
	}

	public void setGt(IGestionTipos gt) {
		this.gt = gt;
	}

	public IGestionDocumento getGd() {
		return gd;
	}

	public void setGd(IGestionDocumento gd) {
		this.gd = gd;
	}

	public boolean isVerPopup() {
		return verPopup;
	}

	public void setVerPopup(boolean verPopup) {
		this.verPopup = verPopup;
	}

	public String getPopupCabecera() {
		return popupCabecera;
	}

	public void setPopupCabecera(String popupCabecera) {
		this.popupCabecera = popupCabecera;
	}

	public String getPopupCuerpo() {
		return popupCuerpo;
	}

	public void setPopupCuerpo(String popupCuerpo) {
		this.popupCuerpo = popupCuerpo;
	}
	

	public void cerrarPopup(){		
		verPopup = false;		
	}

	public List<Documento> getListaDocumentos()  {
	//	System.out.println("Entro en getlistadocumentos"+this.getClass().getName());
		this.ordenar_tabla();		
		return listaDocumentos;
	}

	public void setListaDocumentos(List<Documento> listaDocumentos) {
		//System.out.println("Entro en setlistadocumentos"+this.getClass().getName());
		this.listaDocumentos = listaDocumentos;
	}
	
	//Popup de confirmacion de modificacion Inicio
	private boolean popupModificacion = false;	
	
	public boolean isPopupModificacion() {
		return popupModificacion;
	}


	public void setPopupModificacion(boolean popupModificacion) {
		this.popupModificacion = popupModificacion;
	}
	//Popup de confirmacion de modificacion Fin


	//Proceso de Modificacion
	private String preguntaModificar =  new String();
	private Documento docAModificar;
	private String etiquetaModificar ="Modificar";
	private boolean popupModificarDoc = false;
	private NuevoDocBean nuevoDocBean;
	
	public NuevoDocBean getNuevoDocBean() {
		return nuevoDocBean;
	}


	public void setNuevoDocBean(NuevoDocBean nuevoDocBean) {
		this.nuevoDocBean = nuevoDocBean;
	}
	
	public String modificarDocSeleccionado(){
		try{
			//gd.eliminar(docAModificar);
			nuevoDocBean.setDocumento(docAModificar);
			System.out.println("doc "+docAModificar.getDescripcion());
			popupModificacion = false;
			popupModificarDoc = false;			
		}catch (RuntimeException re) {
		//	popupCabecera = "";
			popupCabecera = "ERROR";
			//popupCuerpo = "";
			popupCuerpo ="Hubo un error al Modificar el documento.";
			log.debug("Error "+re.getLocalizedMessage());
			//TODO enviar email con el error producido. y su log.
			verPopup = true;
			return "modificarDocT";
		}
		return "nuevoDocT";
	}
	
	public void noModificar(){
	//	System.out.println("Entor en no Modificar");
		popupModificarDoc = false;
	}
	
	public void documentoElegido(RowSelectorEvent evento) {
		int fila = evento.getRow();
		preguntaModificar = new String();
		docAModificar = listaDocumentos.get(fila);
		preguntaModificar = "Seguro que desea modificar el siguiente documento:\n";
		preguntaModificar += docAModificar.getNombre()+"\n";
		preguntaModificar += docAModificar.getDescripcion();
		popupModificarDoc=true;		
	}


	public boolean isPopupModificarDoc() {
		return popupModificarDoc;
	}

	public void setPopupModificarDoc(boolean popupModificarDoc) {
		this.popupModificarDoc = popupModificarDoc;
	}

	public String getPreguntaModificar() {
		return preguntaModificar;
	}

	public void setPreguntaModificar(String preguntaModificar) {
		this.preguntaModificar = preguntaModificar;
	}

	public Documento getDocAModificar() {
		return docAModificar;
	}

	public void setDocAModificar(Documento docAModificar) {
		this.docAModificar = docAModificar;
	}

	public String getEtiquetaModificar() {
		return etiquetaModificar;
	}

	public void setEtiquetaModificar(String etiquetaModificar) {
		this.etiquetaModificar = etiquetaModificar;
	}

	
	//Metodos para ordenar la tabla.
	private String columna_a_ordenar;
	private String columna_anteriorordenada;
	private boolean sentido_ordenacion;
	private boolean sentido_ordenacionanterior;
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	protected void ordenar_tabla() {
		Comparator ordenante = new Comparator() {
			public int compare(Object o1, Object o2) {
				Documento documento1 = (Documento) o1;
				Documento documento2 = (Documento) o2;
				if (columna_a_ordenar == null) {
					return 0;
				}
				if (columna_a_ordenar.equals("Nombre")) {
					return sentido_ordenacion ? documento1.getNombre()
							.compareTo(documento2.getNombre()) : documento2.getNombre().compareTo(documento1.getNombre());							
				}
				
				if (columna_a_ordenar.equals("Tipo")) {
					return sentido_ordenacion ? documento1.getTipos().getNombre()
							.compareTo(documento2.getTipos().getNombre()) : 
								documento2.getTipos().getNombre().compareTo(documento1.getTipos().getNombre());							
				}
				
				if (columna_a_ordenar.equals("Descripcion")) {
					return sentido_ordenacion ? documento1.getDescripcion()
							.compareTo(documento2.getDescripcion()) : documento2.getDescripcion().compareTo(documento1.getDescripcion());							
				}
				return 0;
			}
		};
		Collections.sort(listaDocumentos, ordenante);
	}

	public String getColumna_a_ordenar() {
		return columna_a_ordenar;
	}

	public void setColumna_a_ordenar(String columna_a_ordenar) {
		this.columna_a_ordenar = columna_a_ordenar;
	}

	public String getColumna_anteriorordenada() {
		return columna_anteriorordenada;
	}

	public void setColumna_anteriorordenada(String columna_anteriorordenada) {
		this.columna_anteriorordenada = columna_anteriorordenada;
	}

	public boolean isSentido_ordenacion() {
		return sentido_ordenacion;
	}

	public void setSentido_ordenacion(boolean sentido_ordenacion) {
		this.sentido_ordenacion = sentido_ordenacion;
	}

	public boolean isSentido_ordenacionanterior() {
		return sentido_ordenacionanterior;
	}

	public void setSentido_ordenacionanterior(boolean sentido_ordenacionanterior) {
		this.sentido_ordenacionanterior = sentido_ordenacionanterior;
	}
	
	
}
